package trieSimple;

import java.io.Serializable;
import java.util.LinkedList;


public class TrieNode implements Serializable {

    private static final long serialVersionUID = 5324865847956488115L;

    //记录当前的char值
    public char nodeChar;
    
    //记录当前字符是不是end， 例如   hello， 对于o这个节点， isEnd=true;
    public boolean isEnd;
    
    //记录以当前词为前缀的词的个数。 例如    just， 假如当前字符为s， 那么就是说  jus 这个词前缀出现的频率， 有多少词以这个词缀为词缀。 
    public int preFixFreq;
    
    //当前节点的子节点数组。 
    public LinkedList<TrieNode> childNodes;
    
    public TrieNode fatherNode = null;
    
    public String wholeWord = "";
    
    public String compactStr ;
    
    
    
    public char getNodeChar() {
        return nodeChar;
    }

    public boolean isEnd(){
        return isEnd;
    }

    public void setNodeChar(char nodeChar) {
        this.nodeChar = nodeChar;
    }



    public int getPreFixFreq() {
        return preFixFreq;
    }



    public void setPreFixFreq(int preFixFreq) {
        this.preFixFreq = preFixFreq;
    }



    public LinkedList<TrieNode> getChildNodes() {
        return childNodes;
    }



    public void setChildNodes(LinkedList<TrieNode> childNodes) {
        this.childNodes = childNodes;
    }



    public TrieNode getFatherNode() {
        return fatherNode;
    }



    public void setFatherNode(TrieNode fatherNode) {
        this.fatherNode = fatherNode;
    }



    public String getWholeWord() {
        return wholeWord;
    }



    public void setWholeWord(String wholeWord) {
        this.wholeWord = wholeWord;
    }



    public String getCompactStr() {
        return compactStr;
    }



    public void setCompactStr(String compactStr) {
        this.compactStr = compactStr;
    }



    //创建TrieNode的构造树
    public TrieNode(char c){
        childNodes=new LinkedList<>();
        nodeChar = c;
        isEnd=false;
        preFixFreq=0;
    }
    
    
    
    /**
     * 传入一个字符，判断当前节点的子节点里面是否有这个字符， 有就返回这个字符所属的节点， 没有就返回null
     * @param c
     * @return
     */
    public TrieNode subNodes(char c){
        if (null != childNodes) {
            for(TrieNode node:childNodes){
                if (node.nodeChar == c) {
                    return node;
                }
            }
        }
        return null;
    }
    
    
    
    
}
